# 组合指的是某一个对象拥有一个属性，该属性的值是另外一个类的对象
class Foo:
    xxx = 100
class Bar:
    yyy = 200
    def zzz(self):
        print("我是bar方法")
# 通过Foo类创建obj对象
obj = Foo()
# 通过Bar创建obj1对象
obj1 = Bar()
# 把obj1赋值给了obj的attr属性
obj.attr = obj1
# 此时； obj.attr == obj1
assert obj.attr is obj1
"""
assert：断言
用预期结果跟实际结果去比对
is ：判断两个对象的地址值是否相等
"""
# print(id(obj.attr))
# print(id(obj1))
"""
== 和is是有区别的
"""
"""
assert 101 not in [10,20,30,40]
a_list =[11,22,33]
b_list = [11,22,33]
assert a_list == b_list
# assert a_list is b_list
a_tuple = (11,22,33)
b_tuple = (11,22,33)
assert a_tuple == b_tuple
assert a_tuple is b_tuple
"""
"""
什么是可变类型？（列表、集合、字典）
可变类型是可以增删改的
如果有相同的类型数据，那么判断==是通过的，判断is是不通过的
因为两个相同可变类型，地址值是不一样的
list1 = [11,22,33]
list1[0] = 22

什么是不可变类型？（字符串、元组）
内部成员一旦定义，不可以更改
str1 = "abc"
str1 = "abcd"  X 错误 这不是可变，只是重新定义而已
如果有相同的数据，内容一样，那么它们的地址值一定是相同的
"""
class People:
    school = "不造啊"
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
class Student(People):
    def __init__(self,name,age,sex,score = 0):
        super().__init__(name,age,sex)
        self.score = score
class Teacher(People):
    def __init__(self,name,age,sex,course=[]):
        super().__init__(name,age,sex)
        self.course = course
    def tell_info1(self):
        for i in self.course:
            i.tell_info()
class Course:
    def __init__(self,c_name,c_price):
        self.c_name = c_name
        self.c_price = c_price
    def tell_info(self):
        print("<课程名:%s>,价格%s"%(self.c_name,self.c_price))

# 通过Course类创建课程对象
c1 = Course("Python自动化测试",5000)
c2 = Course("接口测试",3000)

# 创建Teacher对象
t1 = Teacher("张鑫",19,'女')
# 把t1对象的course列表进行添加
t1.course.append(c1)
t1.course.append(c2)

# 通过Teacher类对象，调用tell_info1方法
t1.tell_info1()




















